'use strict'

module.exports = (app) => {
  const { STRING, INTEGER, DATE, JSON } = app.Sequelize

  const SysUser = app.model.define(
    'sys_user',
    {
      id: {
        type: INTEGER,
        primaryKey: true,
        autoIncrement: true
      },
      // 用户名
      username: {
        type: STRING,
        primaryKey: true,
        allowNull: false,
        unique: true
      },
      // 密码
      password: {
        type: STRING,
        allowNull: false
      },
      // 昵称
      nickname: {
        type: STRING
      },
      // 头像
      avatar: {
        type: JSON
      },
      // 手机
      phone: {
        type: STRING
      },
      // 邮箱
      email: {
        type: STRING
      },
      // 角色
      role: {
        type: JSON
      },
      // 性别
      gender: {
        type: INTEGER
      },
      // 备注
      comment: {
        type: STRING
      },
      // 生日
      birthday: {
        type: DATE
      },
      // 部门
      department_id: {
        type: STRING
      },
      // 标签
      tags: {
        type: JSON
      },
      score: {
        type: INTEGER
      },
      // 状态
      status: {
        type: INTEGER
      },
      // token
      token: {
        type: STRING
      },
      // 邀请人
      inviter_uid: {
        type: STRING
      },
      // 邀请码
      my_invite_code: {
        type: STRING
      },
      // 实名认证
      realname_auth: {
        type: JSON
      },
      // 注册ip
      register_ip: {
        type: STRING
      },
      // 注册时间
      register_date: {
        type: DATE
      },
      // 登录ip
      login_ip: {
        type: STRING
      },
      // 登录时间
      login_date: {
        type: DATE
      },
      // 微信openid
      wx_openid: {
        type: STRING
      },
      // 微信unionid
      wx_unionid: {
        type: STRING
      },
      // 第三方登录凭证
      third_party: {
        type: JSON
      },
      // vip过期时间
      vip_valid_date: {
        type: DATE
      }
    },
    {
      // timestamps: false, // 不使用createAt和updateAt字段
      freezeTableName: true, // 禁止自动复数化表名
      createdAt: 'created_at',
      updatedAt: 'updated_at'
    }
  )

  return SysUser
}
